const { ethers } = require("hardhat");

/**
 * 部署AuctionNFT合约的脚本
 * 
 * 这个脚本会：
 * 1. 部署AuctionNFT合约
 * 2. 验证部署是否成功
 * 3. 输出合约地址和基本信息
 */
async function main() {
    console.log("开始部署AuctionNFT合约...\n");
    
    // 获取部署者账户
    const [deployer] = await ethers.getSigners();
    console.log("部署者地址:", deployer.address);
    
    // 获取部署者余额
    const balance = await ethers.provider.getBalance(deployer.address);
    console.log("部署者余额:", ethers.formatEther(balance), "ETH\n");
    
    // 获取合约工厂
    const AuctionNFT = await ethers.getContractFactory("AuctionNFT");
    
    // 部署合约
    console.log("正在部署合约...");
    const auctionNFT = await AuctionNFT.deploy(deployer.address);
    
    // 等待部署完成
    await auctionNFT.waitForDeployment();
    
    const contractAddress = await auctionNFT.getAddress();
    console.log("✅ AuctionNFT合约部署成功!");
    console.log("📍 合约地址:", contractAddress);
    
    // 验证合约基本信息
    console.log("\n📋 合约信息验证:");
    console.log("- 合约名称:", await auctionNFT.name());
    console.log("- 合约符号:", await auctionNFT.symbol());
    console.log("- 合约拥有者:", await auctionNFT.owner());
    console.log("- 下一个TokenId:", await auctionNFT.getNextTokenId());
    console.log("- 当前总供应量:", await auctionNFT.getTotalSupply());
    
    // 测试铸造一个NFT（可选）
    console.log("\n🎨 测试铸造NFT...");
    const testTokenURI = "https://example.com/metadata/test.json";
    const mintTx = await auctionNFT.mint(deployer.address, testTokenURI);
    await mintTx.wait();
    
    console.log("✅ 测试NFT铸造成功!");
    console.log("- TokenId: 1");
    console.log("- 拥有者:", await auctionNFT.ownerOf(1));
    console.log("- TokenURI:", await auctionNFT.tokenURI(1));
    console.log("- 创建者:", await auctionNFT.getCreator(1));
    
    console.log("\n🎉 部署完成!");
    console.log("合约地址:", contractAddress);
    
    // 保存部署信息到文件（可选）
    const deploymentInfo = {
        contractName: "AuctionNFT",
        contractAddress: contractAddress,
        deployer: deployer.address,
        network: (await ethers.provider.getNetwork()).name,
        blockNumber: await ethers.provider.getBlockNumber(),
        timestamp: new Date().toISOString()
    };
    
    console.log("\n📄 部署信息:");
    console.log(JSON.stringify(deploymentInfo, null, 2));
}

// 执行部署脚本
main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error("❌ 部署失败:", error);
        process.exit(1);
    });